Preparación del entorno de trabajo

Primero, limpiamos el entorno de trabajo para asegurarnos de que no haya datos ni objetos de sesiones anteriores que puedan interferir con nuestro análisis.

#Borrar el entorno de trabajo
rm(list=ls())

Cargar las librerías necesarias

Para realizar nuestro análisis, necesitaremos varias librerías que facilitan la manipulación de datos, la creación de gráficos y la realización de pruebas estadísticas.

# Cargar librerías necesarias
library(ggplot2)     # Para gráficos 2D
library(plotly)      # Para gráficos 3D
library(readr)       # Para leer archivos CSV
library(stats)       # Para realizar PCA
library(factoextra)  # Para eigenvalue y visualización de PCA
library(dplyr)       # Para manipulación de datos
library(nortest)     # Para pruebas de normalidad
library(gtsummary)   # Para tablas resumen

Cargar y verificar los datos

A continuación, cargamos los datos desde un archivo CSV y realizamos una verificación inicial para detectar valores NA.

# Cargar la base de datos
datos <- read.csv("mubio02_act3_alimentos_nutrientes_4900.csv")

# Ver los datos cargados
View(datos)

# Verificar si hay valores NA
any(is.na(datos)) # Retorna TRUE si hay valores NA
## [1] TRUE
# Contar valores NA en cada columna
colSums(is.na(datos))

Limpieza de datos

Eliminamos las filas con valores NA para asegurarnos de que nuestro análisis se realice sobre datos completos.

# Eliminar filas con valores NA
datos_limpios <- datos[complete.cases(datos),]

# Verificar nuevamente si hay valores NA
any(is.na(datos_limpios)) # Debería retornar FALSE
## [1] FALSE
# Ver los datos limpios
View(datos_limpios)

Comprobación de la normalidad

Para cada variable en nuestros datos limpios, realizaremos una prueba de normalidad y registraremos los p-values.

# Cromprobar la normalidad de los datos
pvalor <- matrix(NA, nrow=ncol(datos_limpios), ncol=1) # Crear una matriz para registrar los p values
# Utilizar un bucle para calcular la normalidad en cada columna
for (i in 2:ncol(datos_limpios)) {
  resultado_anderson <- ad.test(datos_limpios[[i]]) #Aplicar el test de Anderson-Darling a cada columna
  pvalor[i, ] <- resultado_anderson$p.value #Guardar el valor de p-value en la matriz
}
head(pvalor)
##              [,1]
## [1,]           NA
## [2,] 1.834905e-19
## [3,] 3.700000e-24
## [4,] 3.700000e-24
## [5,] 3.700000e-24
## [6,] 3.700000e-24

Normalización de los datos

Una vez comprobada la normalidad, procedemos a normalizar los datos numéricos para prepararlos para análisis posteriores.

# Normalizar todos los datos numéricos
datos_limpios_norm <- datos_limpios %>% 
  mutate(across(where(is.numeric), scale))

Visualización de los Datos Normalizados

Para comenzar, visualizamos las primeras filas de los datos normalizados para tener una idea preliminar de cómo se ven después de la normalización

(datos_limpios_norm)

Luego, para una inspección más detallada, abrimos los datos normalizados en una vista más amplia.

View(datos_limpios_norm)

Extracción de Nutrientes y Alimentos

A continuación, extraemos las columnas específicas que contienen información sobre nutrientes y alimentos. Esto se hace seleccionando las columnas desde la 28 hasta la última columna del conjunto de datos normalizados.

datos_alimentos <- datos_limpios_norm[ ,28:length(names(datos_limpios_norm))]

Para tener una referencia del tamaño original del conjunto de datos, verificamos el número de filas.

nrow(datos)
## [1] 4900

Y también verificamos las dimensiones del nuevo conjunto de datos que contiene solo la información de nutrientes y alimentos.

dim(datos_alimentos)
## [1] 4334  150

Análisis de Componentes Principales (PCA) de Nutrientes y Alimentos

Procedemos a realizar un PCA sobre el conjunto de datos de nutrientes y alimentos para reducir la dimensionalidad y extraer las principales fuentes de variación.

pca <- prcomp(datos_alimentos)

Verificamos el número de filas en los resultados del PCA para entender la estructura de los datos transformados.

nrow(pca$x)
## [1] 4334

Resumen del PCA

Obtenemos las cinco primeras columnas del resumen del PCA para obtener una visión general de los resultados, incluyendo la varianza explicada por cada componente principal.

head(pca$x)[ ,1:5] 
##          PC1        PC2        PC3         PC4         PC5
## 1  2.4928061 -4.5233512 -1.2848556 -2.14040406  1.95408298
## 2 -2.7303997 -3.1043334  1.0850326 -1.55665862  1.02257309
## 3 -2.3882081 -1.5621890 -0.7679622  1.10728189 -0.58055140
## 4 10.5884407 -0.9154204  2.6263744 -0.41204110 -1.96276884
## 5  0.3474439  1.2215906 -0.2867492  0.09573814 -0.26883605
## 6 -1.5408380 -1.0763730  2.9170004 -2.01399951 -0.08694383

Valores Propios (Eigenvalues)

Obtenemos los valores propios del PCA para evaluar la importancia de cada componente principal.

eigenvalues <- get_eigenvalue(pca)

Imprimimos los valores propios para verificar que con las primeras dos dimensiones se explica más del 60-70% de la varianza acumulada, lo cual es un criterio común para la selección de componentes.

(eigenvalues)

Visualización de la Varianza Explicada

Realizamos una comprobación visual de la varianza explicada por cada componente principal para ayudar en la interpretación de los resultados.

fviz_eig(pca, addlabels = TRUE, ylim = c(0, 20))

Variables Más Destacadas

Finalmente, visualizamos las variables más destacadas según sus contribuciones a los ejes PC1 y PC2. Esto nos permite identificar qué variables tienen mayor peso en las primeras dos componentes principales.

fviz_contrib(pca, choice = "var", axes = 1, top = 10)

fviz_contrib(pca, choice = "var", axes = 2, top = 10)

## Creación de Gráficos de los Componentes Principales Para visualizar y entender mejor los resultados del Análisis de Componentes Principales (PCA), generamos gráficos que nos permiten observar las relaciones entre las observaciones y las variables.

Gráfico de las Dos Primeras Componentes Principales

Primero, creamos un gráfico para visualizar las observaciones en el espacio definido por las dos primeras componentes principales. Esto nos ayuda a entender cómo se agrupan las observaciones.

fviz_pca_ind(pca, geom.ind = "point", 
             col.ind = "blue", 
             axes = c(1, 2), 
             pointsize = 1.5) 

### Gráfico de Correlación de Variables Luego, visualizamos el gráfico de correlación de las variables con las componentes principales. Las flechas indican cómo cada variable contribuye a las dos principales componentes.

fviz_pca_var(pca, col.var = "cos2", 
             geom.var = "arrow", 
             labelsize = 2, 
             repel = T)

### Creación de Dataframe de Scores del PCA Para trabajar con los resultados del PCA de manera más detallada, convertimos los scores de las componentes principales en un dataframe.

scores_PCA_df <- as.data.frame(pca$x)

Visualizamos las primeras filas del dataframe para verificar su estructura.

head(scores_PCA_df)[ ,1:5]

Y verificamos las dimensiones del dataframe para entender su tamaño.

dim(scores_PCA_df)
## [1] 4334  150

Creación de Terciles para Cada Componente Principal

Para analizar la distribución de las observaciones en cada componente principal, dividimos los scores en terciles, lo que nos permite categorizar las observaciones en tres grupos según su posición en cada componente.

componentes_terciles <- scores_PCA_df %>%
  mutate(across(everything(), ~ ntile(., 3), .names = "tercil_{col}"))

Convertimos los terciles en factores para facilitar su análisis posterior.

componentes_terciles_factor <- componentes_terciles %>%
  mutate(across(starts_with("tercil_"), as.factor))

Verificamos las dimensiones del nuevo dataframe para asegurarnos de que la transformación se ha realizado correctamente.

dim(componentes_terciles_factor)
## [1] 4334  300

Visualización y Análisis de los Terciles

Finalmente, visualizamos los factores de terciles para cada componente principal, lo que nos permite analizar cómo se distribuyen las observaciones en el espacio del PCA.

View(componentes_terciles_factor)

Extraemos y visualizamos los factores de terciles específicamente para las primeras dos componentes principales (PC1 y PC2) para un análisis más detallado.

terciles_factor_PC1 <- componentes_terciles_factor[151]
terciles_factor_PC2 <- componentes_terciles_factor[152]

View(terciles_factor_PC1)

Análisis de Variables Sociodemográficas y su Relación con los Componentes Principales

Para comprender mejor cómo las variables sociodemográficas se relacionan con los patrones identificados por el PCA, combinamos estas variables con los terciles de las componentes principales y generamos tablas resumen.

Estructura del Factor PC1

Primero, examinamos la estructura del factor PC1 para entender cómo se ha codificado.

str(terciles_factor_PC1)
## 'data.frame':    4334 obs. of  1 variable:
##  $ tercil_PC1: Factor w/ 3 levels "1","2","3": 3 1 1 3 2 2 3 1 1 2 ...

Visualización de los Datos Originales

Para tener una referencia de los datos con los que estamos trabajando, visualizamos el conjunto de datos original.

View(datos)

Selección de Variables Sociodemográficas Continuas

Seleccionamos variables sociodemográficas continuas de interés, como altura, peso, IMC (Índice de Masa Corporal), edad y METs por semana (una medida de actividad física).

socio_continuas <- select(datos_limpios_norm, altura, peso, IMC, edad, METs_h_semana)

Visualizamos estas variables para verificar su selección.

View(socio_continuas)

Combinación de Variables Sociodemográficas con Terciles de PC1

Combinamos las variables sociodemográficas seleccionadas con los terciles de PC1 para analizar su relación.

socio_continuas_PC1 <- cbind(socio_continuas, terciles_factor_PC1)

Visualizamos el resultado de esta combinación para PC1.

View(socio_continuas_PC1)

Verificamos la clase del dataframe resultante para asegurarnos de que sigue siendo adecuado para análisis.

class(socio_continuas_PC1)
## [1] "data.frame"

Combinación con Terciles de PC2

Realizamos el mismo proceso para combinar las variables sociodemográficas con los terciles de PC2.

socio_continuas_PC2 <- cbind(socio_continuas, terciles_factor_PC2)

Visualizamos el resultado de esta combinación para PC2.

View(socio_continuas_PC2)

Creación de Tabla Resumen para PC1

Generamos una tabla resumen para las variables sociodemográficas según los terciles de PC1. Esta tabla incluye estadísticas descriptivas y pruebas de significancia para identificar diferencias entre los grupos.

tabla_resumen_PC1 <- socio_continuas_PC1 %>%
  select(tercil_PC1, altura, peso, IMC, edad, METs_h_semana) %>%
  tbl_summary(
    by = tercil_PC1, 
    type = list(altura ~ "continuous",
                peso ~ "continuous",
                IMC ~ "continuous",
                edad ~ "continuous",
                METs_h_semana ~ "continuous"),
    statistic = list(all_continuous() ~ "{mean} ({sd})")
  ) %>%
  add_p(
    test = all_continuous() ~ "kruskal.test", # Buscar el valor p usando la prueba de Kruskal-Wallis
    pvalue_fun = ~ style_pvalue(.x, digits = 3)) %>%
  modify_header(label = "**Variables**") %>%
  modify_header(all_stat_cols() ~ "**T**")

Visualizamos la tabla resumen para PC1 para interpretar las diferencias entre los terciles en términos de las variables sociodemográficas.

tabla_resumen_PC1
Variables T1 T1 T1 p-value2
altura 0.12 (0.99) 0.02 (1.01) -0.13 (0.99) <0.001
peso 0.08 (1.01) 0.01 (1.00) -0.09 (0.98) <0.001
IMC 0.03 (0.99) 0.00 (0.99) -0.03 (1.02) 0.105
edad -0.02 (1.00) -0.04 (0.99) 0.06 (1.01) 0.011
METs_h_semana -0.13 (0.83) -0.01 (0.88) 0.14 (1.23) <0.001
1 Mean (SD)
2 Kruskal-Wallis rank sum test

Creación y Unión de Tablas Resumen para Componentes Principales (PC1 y PC2)

Este proceso implica la creación de una tabla resumen para el segundo componente principal (PC2) de un conjunto de datos, seguido de la unión de esta tabla con una previamente creada para el primer componente principal (PC1), resultando en una tabla final que resume ambas.

Creación de la Tabla Resumen para PC2

Selección de Variables: Seleccionamos las variables tercil_PC2, altura, peso, IMC, edad, y METs_h_semana del dataframe socio_continuas_PC2.

Uso de tbl_summary: Utilizamos la función tbl_summary para crear una tabla resumen que agrupa los datos por tercil_PC2 y calcula estadísticas descriptivas (media y desviación estándar) para las variables continuas seleccionadas.

Prueba de Kruskal-Wallis: Añadimos los resultados de la prueba de Kruskal-Wallis para evaluar diferencias estadísticas entre los terciles de PC2 para cada variable continua.

Modificación de Encabezados: Modificamos los encabezados de la tabla para mejorar su presentación.

tabla_resumen_PC2 <- socio_continuas_PC2 %>%
  select(tercil_PC2, altura, peso, IMC, edad, METs_h_semana) %>%
  tbl_summary(
    by = tercil_PC2, 
    type = list(
      altura ~ "continuous",
      peso ~ "continuous",
      IMC ~ "continuous",
      edad ~ "continuous",
      METs_h_semana ~ "continuous"
    ),
    statistic = list(all_continuous() ~ "{mean} ({sd})")
  ) %>%
  add_p(
    test = all_continuous() ~ "kruskal.test", 
    pvalue_fun = ~ style_pvalue(.x, digits = 3)
  ) %>%
  modify_header(label = "Variables") %>%
  modify_header(all_stat_cols() ~ "T")

Visualización de la Tabla Resumen para PC2

Para visualizar la tabla resumen creada para PC2, simplemente la llamamos por su nombre:

tabla_resumen_PC2
Variables T1 T1 T1 p-value2
altura -0.22 (0.97) -0.01 (0.99) 0.23 (0.99) <0.001
peso -0.15 (0.98) -0.03 (0.97) 0.17 (1.02) <0.001
IMC -0.04 (1.02) -0.03 (0.97) 0.07 (1.01) <0.001
edad 0.18 (1.02) -0.02 (0.98) -0.17 (0.97) <0.001
METs_h_semana 0.09 (1.16) 0.00 (0.92) -0.09 (0.90) <0.001
1 Mean (SD)
2 Kruskal-Wallis rank sum test

Unión de las Tablas Resumen para PC1 y PC2

Uso de tbl_merge: Utilizamos la función tbl_merge para combinar las tablas resumen de PC1 y PC2 en una sola tabla final.

Añadir Spanners: Añadimos spanners (encabezados superiores) para indicar claramente cuáles columnas pertenecen a PC1 y cuáles a PC2.

tabla_final <- tbl_merge(
  tbls = list(tabla_resumen_PC1, tabla_resumen_PC2),
  tab_spanner = c("PC1", "PC2")
)

Visualización de la Tabla Final

Para visualizar la tabla final que combina las tablas resumen de PC1 y PC2, la llamamos por su nombre:

tabla_final
Variables PC1 PC2
T1 T1 T1 p-value2 T1 T1 T1 p-value2
altura 0.12 (0.99) 0.02 (1.01) -0.13 (0.99) <0.001 -0.22 (0.97) -0.01 (0.99) 0.23 (0.99) <0.001
peso 0.08 (1.01) 0.01 (1.00) -0.09 (0.98) <0.001 -0.15 (0.98) -0.03 (0.97) 0.17 (1.02) <0.001
IMC 0.03 (0.99) 0.00 (0.99) -0.03 (1.02) 0.105 -0.04 (1.02) -0.03 (0.97) 0.07 (1.01) <0.001
edad -0.02 (1.00) -0.04 (0.99) 0.06 (1.01) 0.011 0.18 (1.02) -0.02 (0.98) -0.17 (0.97) <0.001
METs_h_semana -0.13 (0.83) -0.01 (0.88) 0.14 (1.23) <0.001 0.09 (1.16) 0.00 (0.92) -0.09 (0.90) <0.001
1 Mean (SD)
2 Kruskal-Wallis rank sum test

Análisis de Regresión Logística para Explorar la Relación entre Variables Sociodemográficas, Componentes Principales y Diabetes

Este análisis tiene como objetivo explorar cómo las variables sociodemográficas y los patrones dietéticos identificados a través de los componentes principales (PC1 y PC2) se relacionan con la presencia de diabetes. Para ello, realizamos una regresión logística.

Preparación de Datos para la Regresión Logística

Selección y Conversión de la Variable de Diabetes: Seleccionamos la columna correspondiente a la presencia previa de diabetes y la convertimos en un factor binario para su uso en la regresión logística.

Selección y Conversión de la Variable de Diabetes:

Seleccionamos la columna correspondiente a la presencia previa de diabetes y la convertimos en un factor binario para su uso en la regresión logística.

col_diabetes <- select(datos_limpios, diab_prev)
col_diabetes_factor <- as.factor(col_diabetes$diab_prev)

Estructura y Primeras Filas del Factor de Diabetes:

Examinamos la estructura del factor de diabetes y visualizamos las primeras filas para confirmar la correcta conversión.

str(col_diabetes_factor)
##  Factor w/ 2 levels "0","1": 1 2 1 1 1 2 1 1 1 1 ...
head(col_diabetes_factor)
## [1] 0 1 0 0 0 1
## Levels: 0 1

División en Terciles de Variables Sociodemográficas:

Dividimos las variables sociodemográficas continuas en terciles para facilitar su análisis en relación con la diabetes.

terciles_socio_continuas <- socio_continuas %>%
  mutate(
    altura = ntile(altura, 3),
    peso = ntile(peso, 3),
    IMC = ntile(IMC, 3),
    edad = ntile(edad, 3),
    METs_h_semana = ntile(METs_h_semana, 3)
  )

Creación del DataFrame para Regresión:

Combinamos las variables de interés en un nuevo dataframe que será utilizado para la regresión logística.

datos_regresion <- cbind(terciles_socio_continuas, terciles_factor_PC1, terciles_factor_PC2)

Ejecución de la Regresión Logística

Realizamos una regresión logística para evaluar la relación entre la presencia de diabetes (variable dependiente) y las variables sociodemográficas junto con los terciles de los componentes principales (variables independientes).

modelo_logistico <- glm(col_diabetes_factor ~ tercil_PC1 + tercil_PC2 + edad + peso + IMC + METs_h_semana, 
                        family = binomial,
                        data = datos_regresion)

Interpretación de Resultados

Resumen del Modelo:

Examinamos el resumen del modelo para entender la significancia de las variables y su relación con la presencia de diabetes.

summary(modelo_logistico)
## 
## Call:
## glm(formula = col_diabetes_factor ~ tercil_PC1 + tercil_PC2 + 
##     edad + peso + IMC + METs_h_semana, family = binomial, data = datos_regresion)
## 
## Coefficients:
##               Estimate Std. Error z value Pr(>|z|)    
## (Intercept)   -6.08497    0.36274 -16.775  < 2e-16 ***
## tercil_PC12    0.10931    0.15667   0.698 0.485348    
## tercil_PC13    0.21695    0.15567   1.394 0.163422    
## tercil_PC22   -0.12846    0.14424  -0.891 0.373166    
## tercil_PC23   -0.69300    0.16688  -4.153 3.28e-05 ***
## edad           0.77447    0.09167   8.448  < 2e-16 ***
## peso           0.42059    0.12462   3.375 0.000738 ***
## IMC            0.27814    0.12468   2.231 0.025697 *  
## METs_h_semana  0.14093    0.07738   1.821 0.068547 .  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 2128.7  on 4333  degrees of freedom
## Residual deviance: 1917.5  on 4325  degrees of freedom
## AIC: 1935.5
## 
## Number of Fisher Scoring iterations: 6

Intervalos de Confianza de los Coeficientes:

Calculamos los intervalos de confianza para los coeficientes del modelo para evaluar la precisión de las estimaciones.

confint(modelo_logistico)
## Waiting for profiling to be done...
##                     2.5 %     97.5 %
## (Intercept)   -6.81125289 -5.3886070
## tercil_PC12   -0.19794336  0.4170389
## tercil_PC13   -0.08769607  0.5232684
## tercil_PC22   -0.41236183  0.1536728
## tercil_PC23   -1.02514897 -0.3699642
## edad           0.59792699  0.9576486
## peso           0.17765086  0.6663001
## IMC            0.03485880  0.5237622
## METs_h_semana -0.01029719  0.2932480

Odds Ratios (OR):

Convertimos los coeficientes del modelo en Odds Ratios para interpretar la magnitud del efecto de cada variable sobre la probabilidad de tener diabetes.

exp(modelo_logistico$coefficients)
##   (Intercept)   tercil_PC12   tercil_PC13   tercil_PC22   tercil_PC23 
##   0.002276826   1.115512905   1.242281397   0.879452065   0.500074127 
##          edad          peso           IMC METs_h_semana 
##   2.169433278   1.522855023   1.320671980   1.151349346

Intervalos de Confianza para las Odds Ratios:

Calculamos los intervalos de confianza para las Odds Ratios para evaluar la precisión de estas estimaciones.

exp(confint(modelo_logistico))
## Waiting for profiling to be done...
##                     2.5 %      97.5 %
## (Intercept)   0.001101312 0.004568332
## tercil_PC12   0.820416319 1.517461558
## tercil_PC13   0.916039243 1.687534138
## tercil_PC22   0.662084669 1.166109231
## tercil_PC23   0.358743020 0.690759077
## edad          1.818345448 2.605562598
## peso          1.194408238 1.947020249
## IMC           1.035473490 1.688367639
## METs_h_semana 0.989755640 1.340775250

Conclusiones:

En primer lugar, el análisis de la normalidad de las variables alimentos y nutrientes nos indica que no siguen una distribución Normal (algo esperable por los datos en sí). Al realizar la reducción de dimensiones por PCA, extraemos los score que nos explicarán el grado de asociación de cada paciente a cada uno de componente (PCs). Fijándonos en la salida, cuanto mayor es el score, mayor contribución al PCs concreto tendrá el paciente. En el caso de números negativos, su relación es inversa no aportando nada al PCs concreto (hemos reducido la salida a 5 con un head para no mostrar todos los componentes). Los eigvalues, nos permite identificar las dimensiones de la varianza total de los datos en porcentaje. Observamos que la varianza acumulada no explica ni el 60-70% (con los que nos acercaríamos a valores óptimos) hasta aproximadamente la dimensión 45. Decidimos, por tanto, usar solo las dos primeras dimensiones apoyándonos en la gráfica del codo donde la caída de la varianza explicada es más brusca. También se analiza gráficamente cuánto aporta cada una de las variables, tanto a PC1 Como a PC2, pero en este caso delimitado exclusivamente, a las diez que más aportan en ambos casos. En cuanto a los gráficos descriptivos, en la primera representación, visualizamos la asociación de cada individuo a cada dimensión seleccionada (aunque en este caso y por el exceso de datos pues no es muy clarificador). La siguiente imagen, de igual manera, nos indica las variables que más aportan a cada dimensión y que en consonancia con las gráficas de barras previas, corresponderán de forma generalizada a las variables de tipo nutrientes. Para los análisis descriptivos con respecto a los terciles de PC1 y PC2, hemos decidido tener en cuenta las variables altura, peso, IMC, edad y METs h semana; de los que sacaremos la media y desviación típica que acompañaremos con su p-valor correspondiente, basado en el test de Kruskal-Wallis (para muestras no paramétricas que no siguen distribución normal). En la salida, observamos que para todas las variables analizadas hay diferencias significativas, estando fuertemente relacionadas con PC1 y PC2, excepto para el caso del IMC con respecto a PC1, en la que cualquier diferencia que se diera sería al azar. En el caso de la regresión logística se busca conocer, cómo afectan las variables elegidas en la prevalencia de tener diabetes. Según la tabla podemos ver que: No hay diferencias estadísticamente significativas en las odds para el segundo y tercer tercil, en comparación con el primer tercil (referencia) en el componente 1, ya que los valores p valores son 0,4853 y 0,1634 respectivamente. En cambio, si se observan diferencias estadísticamente significativas en el tercil 3 del componente 2. La variable edad con un valor de Odds Ratio (OR) de 2,1694 y un valor p < 0,01, muestra que el aumento en la edad está fuertemente asociado con un mayor riesgo de diabetes. Por otro lado, la variable de peso e IMC también están asociadas con un mayor riesgo de padecer diabetes, ya que la variable peso tiene una OR de 1,5228 y un valor de p < 0,01 y la variable IMC tiene una OR de 1,3206 con un valor p de 0.0256. No se observan diferencias estadísticamente significativas en el METs horas a la semana.